package com.sz.biz.common.customer.service;

import com.sz.biz.common.customer.entity.CusUser;
import com.sz.common.base.dto.QResultDto;

import java.util.List;

/**
 * Created by xutao on 17/3/28.
 */
public interface CustomerUserService {

    /**
     * 新增子账户基本信息
     *
     * @param entry 新增的实体
     * @return 新增是否成功
     */
    int save(CusUser entry);

    /**
     * 批量新增
     *
     * @param list
     */
    void batchsave(List<CusUser> list);

    /**
     * 批量删除
     *
     * @param ids
     */
    void batchDelete(List<Integer> ids);

    /**
     * 锁定用户
     *
     * @param ids
     */
    void lockCustomer(List<Integer> ids);

    /**
     * 解锁用户
     *
     * @param ids
     */
    void unlockCustomer(List<Integer> ids);

    /**
     * 修改用户
     *
     * @param list
     */
    void updateCustomer(List<CusUser> list);

    /**
     * 查找用户
     *
     * @param
     */
    QResultDto findCustomerList(String q, int pageIndex, int pageSize, String sortName,
                                boolean isAsc, String language, int refCustomerId);

    /**
     * 修改密码
     *
     * @param
     */
    void changeCustomerPassword(Integer id, String oldPassword, String newPassword);

    /**
     * 校验邮件
     *
     * @param userId
     * @param email
     */
    void customerEmailCheck(int userId, String email);


    boolean customerEmailExist(int userId, String email);

    /**
     * 重置密码
     *
     * @param
     * @param
     */
    void resetUsersPasswd(List<Integer> userIds);

    /**
     * 凭借customerid查账子账户信息
     */
    List<CusUser> findByCustomerId(Integer refCustomerId);

    /**
     * 凭借customerid查账子账户信息-包括已经删除的子帐号
     */
    List<CusUser> findByCustomerIdIncludeDeleted(Integer refCustomerId);


    /**
     * 凭借id查账子账户信息
     */
    CusUser findById(Integer id);

    List<CusUser> findByIds(List<Integer> ids);

    List<CusUser> findShortByIds(List<Integer> ids);

    CusUser findShortById(Integer id);

    /**
     * @param accountName
     * @return
     */
    CusUser findByAccountName(String accountName);

    /**
     * 校验用户名称
     *
     * @param userId
     * @param userName
     */
    void customerUserNameCheck(int userId, String userName);

    /**
     * 获取username列表
     *
     * @param
     * @param
     */
    QResultDto getUserNameList(String q, int pageIndex, int pageSize, String sortName,
                               boolean isAsc, String language, Integer userType);

    /**
     * 获取fullname列表
     *
     * @param
     * @param
     */
    QResultDto getFullNameList(String q, int pageIndex, int pageSize, String sortName,
                               boolean isAsc, String language);

    /**
     * 获取主账号列表
     *
     * @param
     * @param
     */
    QResultDto getPrimaryAccountListPage(String q, int pageIndex, int pageSize, String sortName,
                                         boolean isAsc, String language);

    /**
     * 查找用户对应的货币信息
     *
     * @param
     * @param
     */
    QResultDto getTradingCurencyByUserId(int id);

    /**
     * 检查移动电话号码是否存在
     */
    boolean checkMobilePhoneExist(Integer userId, String mobilePhone);

    /**
     * 单纯检验手机号码是否存在，只检查手机号，不牵涉用户
     */
    boolean telNoExist(String mobilePhone);

    /**
     * 查找手机号码对应的账号
     */
    CusUser selectByTelNo(String mobilePhone);

    /**
     * 凭借手机号码重设密码
     */
    void forgetPasswordForReset(Integer id, String newPassword, String confirmPassword);

    /**
     * 异步校验用户名称
     *
     * @param userId
     * @param userName
     */
    Boolean userNameIsExist(Integer userId, String userName);

    /**
     * 查找用户列表-客户系统使用
     *
     * @param
     */
    QResultDto findSimpleCustomerList(String q, int pageIndex, int pageSize, String sortName,
                                      boolean isAsc, String language, int refCustomerId);

    /**
     * 查找用户列表-客户系统使用
     *
     * @param
     */
    QResultDto findSubAccountByLoginId(Integer refCustomerId, String q, int pageIndex, int pageSize);

    /**
     * 凭借ID修改email
     *
     * @param
     */
    void updateEmailById(Integer id, String email);

    /**
     * 获取username列表-为了支持二级联动
     *
     * @param
     */
    QResultDto getLinkedUserNameList(String q, int pageIndex, int pageSize, String sortName,
                                     boolean isAsc, String language, Integer userType, Integer refCustomerId);


    Boolean checkMainAccountLockedStatus(String userName);

    /**
     * 检查账号是否有效
     *
     * @param cusUserId 账号的id
     */
    boolean isUserValid(int cusUserId);

}


